import axios from 'axios'
import { VueAxios } from './axios'
import { Toast } from 'vant'
import store from '@/store'
// import router from '@/router/index'
// 处理loading
// const toast = () =>
//   Toast.loading({
//     duration: 0, // 持续展示 toast
//     forbidClick: true,
//     loadingType: 'spinner',
//     className: 'loading-icon',
//     message: '加载中...',
//   })

const request = axios.create({
  // API 请求的默认前缀
  baseURL: process.env.VUE_APP_API_BASE_URL,
  timeout: 20000, // 请求超时时间
  withCredentials: true,
})

// const instance = axios.create({
//   //   baseURL: process.env.VUE_APP_BASE_URL, // 如果不配置代理,就用这个
//   baseURL: '/itour', // 如果配置代理就用这个
//   timeout: 3500,
// })

// // 异常拦截处理器
const errorHandler = (error) => {
  if (error.response) {
    const data = error.response.data
    // 从 localstorage 获取 token
    const token = localStorage.getItem('client_authorization')
    console.log(token);
    if (error.response.status === 403) {
      Toast.fail({
        // title: 'Forbidden',
        message: data.message,
      })
    }
    if (error.response.status === 500) {
      Toast.fail({
        // title: '服务器异常',
        message: data.message,
      })
    }
    if (error.response.status === 502) {
      return Toast.fail({
        message: '后端正在发布,请稍后再试',
      })
    }
    if (error.response.status === 401) {
      Toast.fail({
        message: '登录失效,请重新登录',
      })

      if (token) {
        // store.dispatch('Logout').then(() => {
        //   setTimeout(() => {
        //     window.location.reload()

        //   }, 1500)
        // })
      }
    }
  }
  return Promise.reject(error)
}

// // 创建请求拦截
// instance.interceptors.request.use(
//   (config) => {
//     toast()
//     // 每次请求的时候 都拿到一个取消请求的方法
//     const Cancel = axios.CancelToken // 产生一个请求令牌
//     config.headers['token'] = 'token'
//     config.cancelToken = new Cancel((c) => store.commit('ajax/push', c))
//     return config
//   },
//   (error) => {
//     Toast.clear()
//     Promise.reject(error)
//   },
// )

request.interceptors.request.use((config) => {
  const token = localStorage.getItem('client_authorization')
  // 如果 token 存在
  // 让每个请求携带自定义 token 请根据实际情况自行修改
  if (token) {
    config.headers['client_authorization'] = token
  }
  config.headers['fromweb'] = '999'
  return config
}, errorHandler)

// response interceptor
request.interceptors.response.use((response) => {
  return response.data
}, errorHandler)

const installer = {
  vm: {},
  install(Vue) {
    Vue.use(VueAxios, request)
  },
}

export default request

export { installer as VueAxios, request as axios }
